#ifndef IMAGEUPLOADMANAGER_H
#define IMAGEUPLOADMANAGER_H

#include <QObject>
#include <QStringList>
#include <QStandardItemModel>
#include <QFileDialog>
#include <QFileInfo>
#include <QDateTime>
#include <QDebug>
#include <QCoreApplication>
#include "qiniuuploader.h"

/**
 * @brief 图片上传管理器类
 * 管理图片上传流程，连接UI和上传逻辑
 */
class ImageUploadManager : public QObject
{
    Q_OBJECT
public:
    explicit ImageUploadManager(QObject *parent = nullptr);
    ~ImageUploadManager();

    /**
     * @brief 初始化七牛云配置
     * @param accessKey 访问密钥
     * @param secretKey 私有密钥
     * @param bucket 存储空间名称
     * @param region 区域代码
     */
    void initialize(const QString &accessKey, const QString &secretKey,
                    const QString &bucket, const QString &region);

    /**
     * @brief 开始上传图片
     */
    void startUpload();

    /**
     * @brief 获取上传历史模型
     * @return 上传历史数据模型
     */
    QStandardItemModel* getUploadHistoryModel() const;


signals:
    /**
     * @brief 上传进度信号
     * @param percent 进度百分比(0-100)
     */
    void uploadProgress(int percent);

    /**
     * @brief 上传完成信号
     * @param success 是否成功
     * @param message 消息内容
     */
    void uploadFinished(bool success, const QString &message);

private slots:
    /**
     * @brief 处理上传进度
     * @param percent 进度百分比
     */
    void handleUploadProgress(int percent);

    /**
     * @brief 处理上传成功
     * @param fileUrl 上传后的文件URL
     * @param key 文件标识符
     */
    void handleUploadSuccess(const QString &fileUrl, const QString &key);

    /**
     * @brief 处理上传失败
     * @param errorMsg 错误信息
     */
    void handleUploadFailed(const QString &errorMsg);


private:
    /**
     * @brief 添加上传记录到模型中
     * @param filename 文件名
     * @param fileUrl 文件链接
     * @param size 文件大小
     * @param uploadTime 上传时间
     */
    void addUploadRecord(const QString &filename, const QString &fileUrl,
                          qint64 size, const QString &uploadTime);

    QiniuUploader *m_uploader;
    QStandardItemModel *m_uploadHistoryModel;
    QString m_currentFilePath;
};

#endif // IMAGEUPLOADMANAGER_H
